package com.systop.ltbook.sms.statistics.util;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import com.systop.core.util.StringUtil;

/**
 * 短信统计工具类
 * @author DU
 */
public class Utils {

	/**
	 * 获得月
	 * @param date
	 */
	public static int getMonth(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.MONTH);
	}

	/**
	 * 获得年
	 * @param date
	 */
	public static int getYear(Date date) {
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(date);
		return calendar.get(Calendar.YEAR);
	}

	/**
	 * 计算当月最后一天
	 */
	public static Date getLastDayOfMonth(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.set(Calendar.DATE, 1);// 设为当前月的1号
		c.add(Calendar.MONTH, 1);// 加一个月，变为下月的1号
		c.add(Calendar.DATE, -1);// 减去一天，变为当月最后一天
		return c.getTime();
	}

	/**
	 * 获取当月第一天
	 */
	public static Date getFirstDayOfMonth(Date date) {
		Calendar c = Calendar.getInstance();
		c.setTime(date);
		c.set(Calendar.DATE, 1);// 设为当前月的1号
		return c.getTime();
	}
	
	/**
	 * 计算两个日期间的所有年月
	 * @param beginDate
	 * @param endDate
	 * @return 例如 2009-01，2009-02
	 */
	public static List<String> getDateMonth(Date beginDate, Date endDate) {
		// 开始,结束时间的年
		int sYear = Utils.getYear(beginDate);
		int eYear = Utils.getYear(endDate);
		// 开始,结束时间的月
		int sMonth = Utils.getMonth(beginDate);
		int eMonth = Utils.getMonth(endDate);
		List<String> month = new ArrayList<String>();
		if ((eYear - sYear) > 0) {// 结束年比开始年大
			for (int temp = sMonth; temp < 12; temp++) {// 开始年剩余月份
				month.add(String.valueOf(sYear) + "-"
						+ StringUtil.zeroPadding(temp + 1, 2));
			}
			for (int temp = sYear + 1; temp <= eYear - 1; temp++) {// 开始,结束年之间的月份
				for (int i = 0; i < 12; i++) {
					month.add(String.valueOf(temp) + "-"
							+ StringUtil.zeroPadding(i + 1, 2));
				}
			}
			for (int temp = 0; temp <= eMonth; temp++) {// 结束年月份
				month.add(String.valueOf(eYear) + "-"
						+ StringUtil.zeroPadding(temp + 1, 2));
			}
		}
		if (eYear == sYear) {// 同一年
			if ((eMonth - sMonth) >= 0) {
				for (int temp = sMonth; temp <= eMonth; temp++) {
					month.add(String.valueOf(eYear) + "-"
							+ StringUtil.zeroPadding(temp + 1, 2));
				}
			}
		}
		return month;
	}
}
